package pw.mcdarc.mc.bython.Pool;

import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

/*
This file is part of Bython.
Dont remove this header anytime.
Under the Apache2 License.
You can't sell it, repost it, share it without permission.
Date: 八月,27,2016
*/
public class TempStore {

    // 不建议直接获取这个HashTable
    // Object不能为null
    public static volatile Hashtable<Object, Object> pool = new Hashtable();

    /**
     * 获取当前的Pool
     * @return
     */
    public Hashtable getPool() {
        return TempStore.pool;
    }

    /**
     * 通过键获取值
     * @param key 键
     * @return 值
     */
    public synchronized Object getValueByKey(Object key) {
        return pool.get(key);
    }

    /**
     * 是否存在值
     * @param value 值
     * @return boolean值
     */
    public boolean isContainValue(Object value) {
        return pool.containsValue(value);
    }

    /**
     * 是否存在键
     * @param key 键
     * @return 布尔值
     */
    public boolean isContainKey(Object key) {
        return pool.containsKey(key);
    }

    /**
     * Pool中是否存在某个对象. 包括Key和Value
     * @param object 对象
     * @return 布尔值
     */
    public boolean isContainObject(Object object) {
        return pool.contains(object);
    }

    /**
     * 放入一对键值到Pool中 重复Put可以覆盖
     * @param key
     * @param value
     */
    public synchronized void put(Object key, Object value) {
        pool.put(key, value);
    }

    /**
     * 清除所有内容
     * 除特殊情况不建议使用
     */
    @Deprecated
    public synchronized void clear() {
        pool.clear();
    }

    /**
     * 获取一个包含所有Key和ValueSet. 用于历遍.
     * @return Set<Entry>
     */
    public Set<Map.Entry<Object,Object>> getEntry() {
        return pool.entrySet();
    }

    /**
     * 移除一个键值对
     * @param key 键
     */
    public void remove(Object key) {
        pool.remove(key);
    }
}
